signature MIR2ASM_STRUCTS =
sig
  structure Mir :MIR
  structure Frame : FRAME
  structure Env : ENV
  sharing type Mir.Ir.mytype = Frame.Ir.mytype
  sharing type Mir.Ir.exp = Frame.Ir.exp 
  (*
  sharing Mir.Ir = Frame.Ir  
  *)
end

signature MIR2ASM = 
sig
  include MIR2ASM_STRUCTS

  val emitCode : ((Mir.mir_fun * (Frame.frame) *
                   ((bool * int * Env.types) Env.env) * 
                   ((int * Env.types) Env.struct_env) *
		   Mir.Ir.exp *
		   Mir.Ir.exp ) list
                  * Mir.mir_data)
		 -> (Frame.Assem.instr list * Frame.Assem.instr list)

  val tmp_out : ((Mir.mir_fun * (Frame.frame) *
                   ((bool * int * Env.types) Env.env) * 
                   ((int * Env.types) Env.struct_env)*
		   Mir.Ir.exp *
		   Mir.Ir.exp ) list
                  * Mir.mir_data)
		-> unit 

  val emitCode' : ((Mir.mir_fun * (Frame.frame) *
                   ((bool * int * Env.types) Env.env) * 
                   ((int * Env.types) Env.struct_env)*
		   Mir.Ir.exp *
		   Mir.Ir.exp ) list
                  * Mir.mir_data)
		  -> (Frame.frame list 
                      * (string * (int * Frame.Assem.etype) list) list 
                      * Frame.Assem.instr list)

end
